package model

import (
	"chat_srv/basic/config"
	"gorm.io/gorm"
	"time"
)

// 会话表
type ImConversation struct {
	Id               uint      `gorm:"column:id;type:bigint;comment:主键id;primaryKey;not null;" json:"id"`                                      // 主键id
	ConversationId   string    `gorm:"column:conversation_id;type:varchar(60);comment:会话唯一id;not null;" json:"conversation_id"`                // 会话唯一id
	ConversationType uint      `gorm:"column:conversation_type;type:tinyint UNSIGNED;comment:会话类型：1私聊 2群聊;not null;" json:"conversation_type"` // 会话类型：1私聊 2群聊
	LastMessageId    uint      `gorm:"column:last_message_id;type:bigint UNSIGNED;comment:最后一条消息id;default:NULL;" json:"last_message_id"`      // 最后一条消息id
	LastSeq          uint      `gorm:"column:last_seq;type:bigint UNSIGNED;comment:最后序列号(全局自增);not null;default:0;" json:"last_seq"`           // 最后序列号(全局自增)
	UnreadCount      uint      `gorm:"column:unread_count;type:int UNSIGNED;comment:未读消息数;default:0;" json:"unread_count"`                     // 未读消息数
	MemberCount      uint      `gorm:"column:member_count;type:int UNSIGNED;comment:成员数量;not null;default:0;" json:"member_count"`             // 成员数量
	CreatedAt        time.Time `gorm:"column:created_at;type:datetime(3);not null;default:CURRENT_TIMESTAMP(3);" json:"created_at"`
	UpdatedAt        time.Time `gorm:"column:updated_at;type:datetime(3);not null;default:CURRENT_TIMESTAMP(3);" json:"updated_at"`
}

// 设置与数据库的映射
func (ic *ImConversation) TableName() string {
	return "im_conversation"
}

// 添加会话
func (ic *ImConversation) Create(db *gorm.DB) error {
	return db.Create(&ic).Error
}

// 查询会话
func (ic *ImConversation) GetImConversation(conversationId string) error {
	return config.DB.Where("conversation_id = ?", conversationId).Limit(1).Find(&ic).Error
}

// 更新会话
func (ic *ImConversation) Update(conversationId string, updateData map[string]interface{}) error {
	return config.DB.Model(&ImConversation{}).Where("conversation_id = ?", conversationId).Updates(updateData).Error
}
